home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / QuakeTools / src / util / vispatch.c < prev   
Encoding:
C/C++ Source or Header  |  1998-06-11  |  7.9 KB  |  176 lines

  1. #include <libqtools.h>
  2.  
  3. int main(int argc, char **agrv) {
  4.   char BSPmatch[] = "e1m1.bsp\0";
  5.   char nameBSPold[] = "Quake:id1/maps/e1m1.bsp\0";
  6.   char nameBSPnew[] = "Quake:id1/maps/e1m12.bsp\0";
  7.   char nameVIS[] = "DH3:id1.vis\0";
  8.   FILE *fileBSPold = fopen(nameBSPold, READ_BINARY);
  9.   FILE *fileBSPnew = fopen(nameBSPnew, WRITE_BINARY_NEW);
  10.   FILE *fileVIS = fopen(nameVIS, READ_BINARY);
  11.   struct bspheader bspHeaderOld;
  12.   struct bspheader bspHeaderNew;
  13.   struct visdata visData;
  14.   
  15.   if((!fileBSPold) || (!fileBSPnew) || (!fileVIS)) {
  16.     printf("cannot open!\n");
  17.     return 0;
  18.   }
  19.   EndianInit();
  20.  
  21.   fread(&bspHeaderOld, 1, sizeof(struct bspheader), fileBSPold);
  22.   memcpy(&bspHeaderNew, &bspHeaderOld, sizeof(struct bspheader));
  23.   fwrite(&bspHeaderNew, 1, sizeof(struct bspheader), fileBSPnew);
  24.  
  25.   while(fread(&visData, 1, sizeof(struct visdata), fileVIS)) {
  26.     if(!strncmp(visData.procName, BSPmatch, 32)) {
  27.       void *memory;
  28.       printf("found %s ...\n", visData.procName);
  29.       
  30.       bspHeaderNew.entities.offset = LittleLong(ftell(fileBSPnew));
  31.       bspHeaderNew.entities.size = bspHeaderOld.entities.size;
  32.       if((memory = malloc(LittleLong(bspHeaderOld.entities.size)))) {
  33.         fseek(fileBSPold, LittleLong(bspHeaderOld.entities.offset), SEEK_SET);
  34.         fread(memory, 1, LittleLong(bspHeaderOld.entities.size), fileBSPold);
  35.         fwrite(memory, 1, LittleLong(bspHeaderNew.entities.size), fileBSPnew);
  36.         free(memory);
  37.       }
  38.  
  39.       bspHeaderNew.planes.offset = LittleLong(ftell(fileBSPnew));
  40.       bspHeaderNew.planes.size = bspHeaderOld.planes.size;
  41.       if((memory = malloc(LittleLong(bspHeaderOld.planes.size)))) {
  42.         fseek(fileBSPold, LittleLong(bspHeaderOld.planes.offset), SEEK_SET);
  43.         fread(memory, 1, LittleLong(bspHeaderOld.planes.size), fileBSPold);
  44.         fwrite(memory, 1, LittleLong(bspHeaderNew.planes.size), fileBSPnew);
  45.         free(memory);
  46.       }
  47.  
  48.       bspHeaderNew.miptex.offset = LittleLong(ftell(fileBSPnew));
  49.       bspHeaderNew.miptex.size = bspHeaderOld.miptex.size;
  50.       if((memory = malloc(LittleLong(bspHeaderOld.miptex.size)))) {
  51.         fseek(fileBSPold, LittleLong(bspHeaderOld.miptex.offset), SEEK_SET);
  52.         fread(memory, 1, LittleLong(bspHeaderOld.miptex.size), fileBSPold);
  53.         fwrite(memory, 1, LittleLong(bspHeaderNew.miptex.size), fileBSPnew);
  54.         free(memory);
  55.       }
  56.  
  57.       bspHeaderNew.vertices.offset = LittleLong(ftell(fileBSPnew));
  58.       bspHeaderNew.vertices.size = bspHeaderOld.vertices.size;
  59.       if((memory = malloc(LittleLong(bspHeaderOld.vertices.size)))) {
  60.         fseek(fileBSPold, LittleLong(bspHeaderOld.vertices.offset), SEEK_SET);
  61.         fread(memory, 1, LittleLong(bspHeaderOld.vertices.size), fileBSPold);
  62.         fwrite(memory, 1, LittleLong(bspHeaderNew.vertices.size), fileBSPnew);
  63.         free(memory);
  64.       }
  65.  
  66.       bspHeaderNew.visilist.offset = LittleLong(ftell(fileBSPnew));
  67.       fread(&bspHeaderNew.visilist.size, 1, sizeof(int), fileVIS);
  68.       if((memory = malloc(LittleLong(bspHeaderNew.visilist.size)))) {
  69.         fread(memory, 1, LittleLong(bspHeaderNew.visilist.size), fileVIS);
  70.         fwrite(memory, 1, LittleLong(bspHeaderNew.visilist.size), fileBSPnew);
  71.         free(memory);
  72.       }
  73.  
  74.       bspHeaderNew.nodes.offset = LittleLong(ftell(fileBSPnew));
  75.       bspHeaderNew.nodes.size = bspHeaderOld.nodes.size;
  76.       if((memory = malloc(LittleLong(bspHeaderOld.nodes.size)))) {
  77.         fseek(fileBSPold, LittleLong(bspHeaderOld.nodes.offset), SEEK_SET);
  78.         fread(memory, 1, LittleLong(bspHeaderOld.nodes.size), fileBSPold);
  79.         fwrite(memory, 1, LittleLong(bspHeaderNew.nodes.size), fileBSPnew);
  80.         free(memory);
  81.       }
  82.  
  83.       bspHeaderNew.texinfo.offset = LittleLong(ftell(fileBSPnew));
  84.       bspHeaderNew.texinfo.size = bspHeaderOld.texinfo.size;
  85.       if((memory = malloc(LittleLong(bspHeaderOld.texinfo.size)))) {
  86.         fseek(fileBSPold, LittleLong(bspHeaderOld.texinfo.offset), SEEK_SET);
  87.         fread(memory, 1, LittleLong(bspHeaderOld.texinfo.size), fileBSPold);
  88.         fwrite(memory, 1, LittleLong(bspHeaderNew.texinfo.size), fileBSPnew);
  89.         free(memory);
  90.       }
  91.  
  92.       bspHeaderNew.faces.offset = LittleLong(ftell(fileBSPnew));
  93.       bspHeaderNew.faces.size = bspHeaderOld.faces.size;
  94.       if((memory = malloc(LittleLong(bspHeaderOld.faces.size)))) {
  95.         fseek(fileBSPold, LittleLong(bspHeaderOld.faces.offset), SEEK_SET);
  96.         fread(memory, 1, LittleLong(bspHeaderOld.faces.size), fileBSPold);
  97.         fwrite(memory, 1, LittleLong(bspHeaderNew.faces.size), fileBSPnew);
  98.         free(memory);
  99.       }
  100.  
  101.       bspHeaderNew.lightmaps.offset = LittleLong(ftell(fileBSPnew));
  102.       bspHeaderNew.lightmaps.size = bspHeaderOld.lightmaps.size;
  103.       if((memory = malloc(LittleLong(bspHeaderOld.lightmaps.size)))) {
  104.         fseek(fileBSPold, LittleLong(bspHeaderOld.lightmaps.offset), SEEK_SET);
  105.         fread(memory, 1, LittleLong(bspHeaderOld.lightmaps.size), fileBSPold);
  106.         fwrite(memory, 1, LittleLong(bspHeaderNew.lightmaps.size), fileBSPnew);
  107.         free(memory);
  108.       }
  109.  
  110.       bspHeaderNew.clipnodes.offset = LittleLong(ftell(fileBSPnew));
  111.       bspHeaderNew.clipnodes.size = bspHeaderOld.clipnodes.size;
  112.       if((memory = malloc(LittleLong(bspHeaderOld.clipnodes.size)))) {
  113.         fseek(fileBSPold, LittleLong(bspHeaderOld.clipnodes.offset), SEEK_SET);
  114.         fread(memory, 1, LittleLong(bspHeaderOld.clipnodes.size), fileBSPold);
  115.         fwrite(memory, 1, LittleLong(bspHeaderNew.clipnodes.size), fileBSPnew);
  116.         free(memory);
  117.       }
  118.  
  119.       bspHeaderNew.leaves.offset = LittleLong(ftell(fileBSPnew));
  120.       fread(&bspHeaderNew.leaves.size, 1, sizeof(int), fileVIS);
  121.       if((memory = malloc(LittleLong(bspHeaderNew.leaves.size)))) {
  122.         fread(memory, 1, LittleLong(bspHeaderNew.leaves.size), fileVIS);
  123.         fwrite(memory, 1, LittleLong(bspHeaderNew.leaves.size), fileBSPnew);
  124.         free(memory);
  125.       }
  126.  
  127.       bspHeaderNew.lface.offset = LittleLong(ftell(fileBSPnew));
  128.       bspHeaderNew.lface.size = bspHeaderOld.lface.size;
  129.       if((memory = malloc(LittleLong(bspHeaderOld.lface.size)))) {
  130.         fseek(fileBSPold, LittleLong(bspHeaderOld.lface.offset), SEEK_SET);
  131.         fread(memory, 1, LittleLong(bspHeaderOld.lface.size), fileBSPold);
  132.         fwrite(memory, 1, LittleLong(bspHeaderNew.lface.size), fileBSPnew);
  133.         free(memory);
  134.       }
  135.  
  136.       bspHeaderNew.edges.offset = LittleLong(ftell(fileBSPnew));
  137.       bspHeaderNew.edges.size = bspHeaderOld.edges.size;
  138.       if((memory = malloc(LittleLong(bspHeaderOld.edges.size)))) {
  139.         fseek(fileBSPold, LittleLong(bspHeaderOld.edges.offset), SEEK_SET);
  140.         fread(memory, 1, LittleLong(bspHeaderOld.edges.size), fileBSPold);
  141.         fwrite(memory, 1, LittleLong(bspHeaderNew.edges.size), fileBSPnew);
  142.         free(memory);
  143.       }
  144.  
  145.       bspHeaderNew.ledges.offset = LittleLong(ftell(fileBSPnew));
  146.       bspHeaderNew.ledges.size = bspHeaderOld.ledges.size;
  147.       if((memory = malloc(LittleLong(bspHeaderOld.ledges.size)))) {
  148.         fseek(fileBSPold, LittleLong(bspHeaderOld.ledges.offset), SEEK_SET);
  149.         fread(memory, 1, LittleLong(bspHeaderOld.ledges.size), fileBSPold);
  150.         fwrite(memory, 1, LittleLong(bspHeaderNew.ledges.size), fileBSPnew);
  151.         free(memory);
  152.       }
  153.  
  154.       bspHeaderNew.models.offset = LittleLong(ftell(fileBSPnew));
  155.       bspHeaderNew.models.size = bspHeaderOld.models.size;
  156.       if((memory = malloc(LittleLong(bspHeaderOld.models.size)))) {
  157.         fseek(fileBSPold, LittleLong(bspHeaderOld.models.offset), SEEK_SET);
  158.         fread(memory, 1, LittleLong(bspHeaderOld.models.size), fileBSPold);
  159.         fwrite(memory, 1, LittleLong(bspHeaderNew.models.size), fileBSPnew);
  160.         free(memory);
  161.       }
  162.  
  163.       fseek(fileBSPnew, 0, SEEK_SET);
  164.       fwrite(&bspHeaderNew, 1, sizeof(struct bspheader), fileBSPnew);
  165.       break;
  166.     }
  167.     else {
  168.       printf("skipping %s (%d bytes) ...\n", visData.procName, LittleLong(visData.size));
  169.       fseek(fileVIS, LittleLong(visData.size), SEEK_CUR);
  170.     }
  171.   }
  172.   
  173.   fclose(fileBSPold);
  174.   fclose(fileBSPnew);
  175.   fclose(fileVIS);
  176. }